package com.aterrizar.ui;

import java.util.ArrayList;

import org.uqbar.arena.actions.MessageSend;
import org.uqbar.arena.bindings.NotNullObservable;
import org.uqbar.arena.layout.ColumnLayout;
import org.uqbar.arena.layout.HorizontalLayout;
import org.uqbar.arena.widgets.Button;
import org.uqbar.arena.widgets.Label;
import org.uqbar.arena.widgets.Panel;
import org.uqbar.arena.widgets.TextBox;
import org.uqbar.arena.widgets.Selector;
import org.uqbar.arena.widgets.tables.Column;
import org.uqbar.arena.widgets.tables.Table;
import org.uqbar.arena.windows.Dialog;
import org.uqbar.arena.windows.SimpleWindow;
import org.uqbar.arena.windows.WindowOwner;
import org.uqbar.commons.model.UserException;

import com.aterrizar.asiento.Asiento;
import com.aterrizar.exception.AsientoYaReservadoException;
import com.aterrizar.usuario.Usuario;

/**
 * Ventana de búsqueda de celulares.
 * 
 * @see BuscadorCelular el modelo subyacente.
 * 
 * @author ?
 */
public class BusquedaWindow extends SimpleWindow<BuscadorAsiento> {

	private static final long serialVersionUID = 5620690576841847324L;
	private Usuario usuario = null;

	public BusquedaWindow(WindowOwner owner, Usuario usuario) {
		super(owner, new BuscadorAsiento());
		setTitle("Aterrizar.com");
		this.usuario = usuario;
	}

	private void createGrid(Panel mainPanel) {
		Table<Asiento> table = new Table<Asiento>(mainPanel, Asiento.class);
		table.bindContentsToProperty("resultados");
		table.bindSelection("selected");
		table.setHeigth(300);
		table.setWidth(600);
	
		
		new Column<Asiento>(table).setTitle("Aerolinea").setFixedSize(100)
				.bindContentsToProperty("nombreAerolinea");
		new Column<Asiento>(table).setTitle("Vuelo").setFixedSize(100)
				.bindContentsToProperty("vuelo");
		new Column<Asiento>(table).setTitle("Asiento").setFixedSize(100)
				.bindContentsToProperty("asiento");
		new Column<Asiento>(table).setTitle("Precio").setFixedSize(100)
				.bindContentsToProperty("precio");
		new Column<Asiento>(table).setTitle("Ubicacion").setFixedSize(100)
				.bindContentsToProperty("ubicacion");
		new Column<Asiento>(table).setTitle("Clase").setFixedSize(100)
				.bindContentsToProperty("clase");

		Panel gridActionsPanel = new Panel(mainPanel);
		gridActionsPanel.setLayout(new HorizontalLayout());

		NotNullObservable elementSelected = new NotNullObservable("selected");
		
		new Button(gridActionsPanel).setCaption("Reservar")
				.onClick(new MessageSend(this, "reservar"))
				.bindEnabled(elementSelected);
		new Button(gridActionsPanel).setCaption("Comprar")
				.onClick(new MessageSend(this, "comprar"))
				.bindEnabled(elementSelected);
		
	}

	@Override
	public void createMainTemplate(Panel mainPanel) {
		setTaskDescription("Ingrese los parametro de la busqueda");
		super.createMainTemplate(mainPanel);
		this.createGrid(mainPanel);
	}

	public void findByExample() {
		this.getModelObject().findByExample(this.usuario);
	}

	public void comprar() {
		try {
			this.getModelObject().comprar(this.usuario);
		} catch (Exception e) {
			throw new UserException("Ha ocurrido un error en su compra: "
					+ e.getMessage());
		}
		OperationSuccessDialog compraDialog = new OperationSuccessDialog(this,
				getModelObject().getSelected(), "comprado");
		compraDialog.open();
	}

	public void reservar() {
		try {
			this.getModelObject().reservar(this.usuario);
		} catch (AsientoYaReservadoException e) {
			Dialog sobreReservaDialog = new SobreReservaDialog(this, getModelObject().getSelected(), this.usuario);
		} catch (Exception e) {
			throw new UserException("Ha ocurrido un error en su reserva: "
					+ e.getMessage());
		}
		OperationSuccessDialog compraDialog = new OperationSuccessDialog(this,
				getModelObject().getSelected(), "reservado");
		compraDialog.open();
	}

	@Override
	protected void addActions(Panel actionsPanel) {
		new Button(actionsPanel).setCaption("Buscar")
				.onClick(new MessageSend(this, "findByExample")).setAsDefault();
	}

	@Override
	protected void createFormPanel(Panel mainPanel) {
//		TextBox origen, destino, fecha;
		TextBox fecha;
		ArrayList<String> listaDeCiudades = new ArrayList<String>();
		listaDeCiudades.add("La Rioja");
		listaDeCiudades.add("Buenos Aires");
		listaDeCiudades.add("Nueva York");
		listaDeCiudades.add("Los Angeles");
		listaDeCiudades.add("Ezeiza");
		listaDeCiudades.add("Estados Unidos");
		listaDeCiudades.add("Peru");
		listaDeCiudades.add("Usuahia");
		listaDeCiudades.add("Aeroparque");
		
		
		Panel filterPanel = new Panel(mainPanel);
		filterPanel.bindContents("example");
		filterPanel.setLayout(new ColumnLayout(2));

//Versión con Texbox para el ingreso de nombre de ciudades.		
//		new Label(filterPanel).setText("Origen : ");
//		origen = new TextBox(filterPanel);
//		origen.bindValueToProperty("origen");
//		new Label(filterPanel).setText("Destino : ");
//		destino = new TextBox(filterPanel);
//		destino.bindValueToProperty("destino");
		new Label(filterPanel).setText("Ciudades de Orígen: ");
		Selector<String> selectorOrigenes= new Selector<String>(filterPanel);
		selectorOrigenes.allowNull(false);
		selectorOrigenes.setContents(listaDeCiudades, "descripcionEntera");
		selectorOrigenes.bindValueToProperty("origen");

		new Label(filterPanel).setText("Ciudades de Destino: ");
		Selector<String> selectorDestinos = new Selector<String>(filterPanel);
		selectorDestinos.allowNull(false);
		selectorDestinos.setContents(listaDeCiudades, "descripcionEntera");
		selectorDestinos.bindValueToProperty("destino"); 
		

		new Label(filterPanel).setText("Fecha : ");
		fecha = new TextBox(filterPanel);
		fecha.bindValueToProperty("fechaSalida");
	}
}
